<?php

require_once dirname(__FILE__).'/../lib/torneoGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/torneoGeneratorHelper.class.php';

/**
 * torneo actions.
 *
 * @package    ehockey
 * @subpackage torneo
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class torneoActions extends autoTorneoActions
{
	private $tablaFixture = array(
		#rueda, fecha, partido, local, visitante
		array(1, 1, 1, 1, 2),
		array(1, 1, 2, 4, 3),
		array(1, 2, 1, 3, 1),
		array(1, 2, 2, 2, 4),
		array(1, 3, 1, 1, 4),
		array(1, 3, 2, 3, 2),

		array(2, 1, 1, 2, 1),
		array(2, 1, 2, 3, 4),
		array(2, 2, 1, 1, 3),
		array(2, 2, 2, 4, 2),
		array(2, 3, 1, 4, 1),
		array(2, 3, 2, 2, 3)
	);

	public function executeListSortear(sfWebRequest $request){
		$this->torneo = $this->getRoute()->getObject();
		$this->form = $this->configuration->getForm($this->torneo);
		
		if ($this->torneo->getPartidosGenerados()){
			$this->getUser()->setFlash('error', 'No pueden editarse torneos con partidos generados.');
			$this->redirect('@torneo');
		}
		if (!$this->torneo->isSorteable()){
			$this->getUser()->setFlash('error', 'El torneo no cuenta con suficiente cantidad de equipos.');
			$this->redirect('@torneo');
		}
		
		$this->torneo->save();
		
		if ($this->torneo->getSorteo() == null){
			$sorteo = new Sorteo();	#creo el objeto sorteo
			$sorteo->setTorneo($this->torneo);
			$sorteo->save();
		}else{
			$sorteo = $this->torneo->getSorteo();
		}

		$this->redirect($this->generateUrl('sorteo_edit', $sorteo));
	}
	
	public function executeDelete(sfWebRequest $request)
  	{
	    $request->checkCSRFProtection();
	    $this->forward404Unless($torneo = Doctrine::getTable('Torneo')->find(array($request->getParameter('id'))), sprintf('El torneo no existe', $request->getParameter('id')));
	    if ($torneo->isNoSorteado()) {
			$this->getUser()->setFlash('notice', 'El torneo fue eliminado con exito.');
		    $torneo->delete();
	    } else {
	    	$this->getUser()->setFlash('error', 'No se puede eliminar un torneo ya sorteado');
	    }
	    $this->redirect('torneo/index');
  	}

	public function executeListGenerarPartidos(sfWebRequest $request){
		$this->torneo = $this->getRoute()->getObject();
		$this->form = $this->configuration->getForm($this->torneo);
		
		if ($this->torneo->getPartidosGenerados()){
			$this->getUser()->setFlash('error', 'Ya se generaron los partidos para este torneo.');
			$this->redirect('@torneo');
		}
		
		if (!$this->torneo->getSorteado()){
			$this->getUser()->setFlash('error', 'El torneo no fue sorteado aun.');
			$this->redirect('@torneo');
		}
		
		$sorteo = $this->torneo->getSorteo();
		#!$sorteo->esValido() || 
		if (!$this->torneo->isSorteable()){
			$this->getUser()->setFlash('error', 'El sorteo no es valido.');
			$this->redirect('@torneo');
		}
		
		$this->generarPartidos($this->torneo);
		
		$this->torneo->setEstado(Torneo::ESTADO_PartidosCreados);
		$this->torneo->save();
		
		$this->getUser()->setFlash('notice', 'Se han generado los partidos del sorteo con exito.');
		$this->redirect('@torneo');
	}
	
	
	public function executeListVerFixture(sfWebRequest $request){
		$this->torneo = $this->getRoute()->getObject();
		$partidos = $this->torneo->getPartidosOrdenadosPorFecha();
		$this->partidos = $partidos;
	}
	
	public function executeEdit(sfWebRequest $request){
		$this->torneo = $this->getRoute()->getObject();
		
		if ($this->torneo->getPartidosGenerados()){
			$this->getUser()->setFlash('error', 'No pueden editarse torneos con partidos generados.');
			$this->redirect('@torneo');
		}else{
			parent::executeEdit($request);
		}
	}
	
	
	private function generarPartidos($torneo){
		$sorteo = $torneo->getSorteo();
		foreach ($this->tablaFixture as $fila){
			$partido = new Partido();
			$partido->setFecha($torneo->getFechaFromNumeroDeFecha($fila[0], $fila[1]));
			$partido->setNroFecha($fila[1]);
			$partido->setNroRueda($fila[0]);
			$partido->setLocalId($sorteo->getEquipoNumero($fila[3] - 1));
			$partido->setEstadoFederacion(Partido::ESTADO_FEDERACION_Pendiente);
			$partido->setVisitanteId($sorteo->getEquipoNumero($fila[4] - 1));
			$partido->setTorneo($torneo);
			$partido->save();
		}
	}
}
